Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2011, 13:43
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Вопрос по методу send()
Уважаемые знатоки js и ajax, подключил ajax, сообщения в базу добавляются методом пост и все вроде работает правильно, одного не понимаю, если данные идут на сервер при помощи пост, то в send() я должен передать параметры урл, все что после ?. Вставил я туда параметры и убирал их отдуда, вставлял null, ajax продолжал работать. Зачем их передавать методу send и если это действительно нужно как их использовать после того как запрос отправлен?
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2011, 22:05
Аватар для yashka525
Mr. Jacob
Отправить личное сообщение для yashka525 Посмотреть профиль Найти все сообщения от yashka525
 
Регистрация: 20.01.2011
Сообщений: 194

Если метод POST, то данные нужно передавать в send:

var data = 'user=' + encodeURIComponent(UserName.value) + '&email=' + encodeURIComponent(UserEmail.value) + '&text=' + encodeURIComponent(UserText.value); //Тут должны быть все твои данные из input, textarea или другое что нибудь
request.open('POST', 'mail.php', !0); //метод передачи данных, файл, асинхронный запрос,
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //тип header,
request.send(data); //посылаем данные.
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2011, 12:12
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

yashka525, google сказал то же самое, только я нигде не нашел этому объяснение, зачем? Все равно в урл ничего не меняется и если их надо передать, их же как-то можно использовать? То что ты написал, я примерно так и сделал.
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2011, 12:28
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от DmitryT Посмотреть сообщение
Уважаемые знатоки js и ajax, подключил ajax, сообщения в базу добавляются методом пост и все вроде работает правильно, одного не понимаю, если данные идут на сервер при помощи пост, то в send() я должен передать параметры урл, все что после ?. Вставил я туда параметры и убирал их отдуда, вставлял null, ajax продолжал работать. Зачем их передавать методу send и если это действительно нужно как их использовать после того как запрос отправлен?
Что Вы понимаете под словами "ajax продолжал работать"? Аджаксу абсолютно пофиг, какие Вы передаете данные. Хоть параметры user, email, text,... хоть ничего не передаете, хоть null. Он просто отправляет POST-запрос на сервер по указанному в request.open() URL.
А отправленные аджаксом данные нужны на сервере для последующей их обработки и сохранения в базе. Проверьте еще раз, сохраняется ли что-то в базе если в переданных Вами данных пусто?

P.S. send(null); тоже будет работать. Но это режим передачи GET-запроса, а не POST.
Ответить с цитированием
  #5 (permalink)  
Старый 21.06.2011, 10:51
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Маэстро,
так в том то и дело что сохраняются, я в сенд вставлял данные, ничего не вставлял, писал null и вообще send закомментировал, то что было в форме приходило в базу и было видно в браузере.

Последний раз редактировалось DmitryT, 21.06.2011 в 11:11.
Ответить с цитированием
  #6 (permalink)  
Старый 21.06.2011, 14:43
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Сообщение от DmitryT Посмотреть сообщение
только я нигде не нашел этому объяснение, зачем?
Затем, что количество символов в URL ограниченно, для это придумали POST, что бы отправлять большие данные в теле запроса. Если вы не собираетесь отправлять большой контент, а просто хотите получить данные, можно спокойной использовать GET.

П.С. Некоторые считают, что POST безопаснее из-за того, что запрос идёт в теле, хотя все куки и так остаются в хедере. Просто нужно использовать POST там, где он нужен.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #7 (permalink)  
Старый 21.06.2011, 23:21
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Получилось вот что, когда я "искалечил" свой аджакс у меня продолжал работать пхп, это наверно неплохо для тех пользователей у которых отключен js, вроде страховки, но как теперь отловить где начинается аджакс, а где пхп, есть в пхп файле одно условие для записи сообщения в базу
if(!empty($_POST["nm"]) && !empty($_POST["txt"]) && $_POST["subm"] == 'go')
{
    $query = "insert into message set userName='{$_POST["nm"]}',text='{$_POST["txt"]}'";
    mysql_query($query) or die("Query failed : ".mysql_error());     
}

пытаюсь вставить в if еще одно условие проверку на аджакс: isset($_SERVER['HTTP_X_REQUESTED_WITH'])
и тогда сообщение перестает приходить в базу. Подскажите как проверить что данные на сервер пришли с аджаксом. Это функция аджакса
function doLoad()
  {
      mess = document.getElementById('message');
      mess.innerHTML = "<img src='images/upload.gif' width='32' height='8'><br><p>Ваш комментарий обрабатывается...</p>";
      var xmlhttp = getXmlHttp();
      var path = "ajaxPHP.php";
      var data = 'nm=' + encodeURIComponent(document.getElementById('nm').value) + '&txt=' + encodeURIComponent(document.getElementById('txt').value) + 'ajax=' + true;
      //var data = 'http://localhost/student/ajaxJS.php';
      xmlhttp.open('post', path , true);
      xmlhttp.onreadystatechange = function()
      {
          if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
          {
              mess.innerHTML = xmlhttp.statusText; //alert(path);
          }
      }
      xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xmlhttp.send(data);
  }
Ответить с цитированием
  #8 (permalink)  
Старый 21.06.2011, 23:27
Аватар для yashka525
Mr. Jacob
Отправить личное сообщение для yashka525 Посмотреть профиль Найти все сообщения от yashka525
 
Регистрация: 20.01.2011
Сообщений: 194

Поставь & вот тут:
+ '*!*&*/!*ajax=' + true

И еще, может лучше сделать просто
+ '&ajax=true'
а на сервере проверить если ajax == true.

Последний раз редактировалось yashka525, 21.06.2011 в 23:31.
Ответить с цитированием
  #9 (permalink)  
Старый 22.06.2011, 10:49
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

yashka525,
все работает, кстати если присутствует параметр и ему не присвоено никакого значения, то его значение true по умолчанию, работает твой 1-й вариант, 2-й,
+ '&ajax'

и так тоже работает.
Спаси всех Господь.
ps
у меня работает ajax == true и почему-то отказывается работать isset($_SERVER['HTTP_X_REQUESTED_WITH']), если кому интересно почитайте что люди об этом пишут еще в 2007
http://softwaremaniacs.org/blog/2007...consistencies/

Последний раз редактировалось DmitryT, 22.06.2011 в 11:29.
Ответить с цитированием
  #10 (permalink)  
Старый 22.06.2011, 14:23
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от DmitryT Посмотреть сообщение
Получилось вот что, когда я "искалечил" свой аджакс у меня продолжал работать пхп, это наверно неплохо для тех пользователей у которых отключен js, вроде страховки, но как теперь отловить где начинается аджакс, а где пхп
У Вас что, существует одновременно две страницы с одной и той же функцией отправки данных на сервер? Одна с помощью AJAX, а вторая с помощью FORM/submit ?

И вот это мне показалось прикольным:
'ajax=' + true
ajax == true

Первый раз вижу, чтобы в параметрах GET/POST запроса прямо передавали true как javascript а потом на сервере проверяли на true как PHP.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49
вопрос по методу pop() Bogdan808 Общие вопросы Javascript 9 21.08.2010 17:54
Вопрос о циклических ссылках (JavaScript -> Dom -> JavaScipt) BlueIce Events/DOM/Window 10 17.02.2010 21:58
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50